package fybug.nulll.pdstream.WR.Parsing.Source.Partition;
import com.sun.istack.internal.NotNull;

import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NonNls;
/**
 * <h2>分割器工场.</h2>
 * <pre>
 * 用于构造 <b>文本分割器</b>
 *
 * 内置:
 * {@link #getLinePartition()} 行分割器
 * {@link #getLinePartition(int)} 有最大限制的行分割器
 * {@link #getTablePartition()} 表单分割器
 * {@link #getTablePartition(int)} 有最大限制的表单分割器
 * {@link #getPartition(CharSequence...)} 普通分割器
 * {@link #getBufferPartition(int)} 无分隔符分割器
 * </pre>
 *
 * @author fybug
 * @version 0.0.5
 * @see ParsingPartition
 * @see LineParsingPartition
 * @since JDK 1.8
 */
@SuppressWarnings( "all" )
public final
class ParsingPartitionS {
    /** {@Hide} */
    @Deprecated
    private
    ParsingPartitionS() {}

    /*
     * MainPartition
     */

    /**
     * <p>构造一个分割器.</p>
     * <pre>
     * 需传入要检查的 <b>分隔符</b>
     * <b>分隔符</b> 可以不止一个
     * </pre>
     *
     * @param mark 分隔符
     */
    @NotNull
    public static
    ParsingPartition getPartition(@NotNull @NonNls final CharSequence... mark)
    { return new ParsingPartition(-1, mark); }

    /**
     * <p>构造有最大限制的分割器.</p>
     * <pre>
     * 该 <b>分割器</b> 有最大读取缓存大小
     * <b>到达大小</b> 后应抛出数据并清除缓存
     * </pre>
     *
     * @param suze 最大缓存大小
     */
    @NotNull
    public static
    ParsingPartition getBufferPartition(final int suze) { return new ParsingPartition(suze); }

    /*
     * LinePartition
     */

    /**
     * <p>构造一个行分割器.</p>
     * <pre>
     * 该 <b>分割器</b> 根据 <b>换行符</b> 来对文本进行分割
     * 即每次读取一行
     *
     * <b>依据:</b>{@code "\n\r","\r\n","\n"}
     * </pre>
     *
     * @return {@link LineParsingPartition}
     */
    @NotNull
    @Contract( pure = true )
    public static
    ParsingPartition getLinePartition() { return getLinePartition(-1); }

    /**
     * <p>构造一个有最大限制的行分割器.</p>
     * <p>有最大读取缓存限制的 <b>行分割器</b></p>
     *
     * @return {@link LineParsingPartition}
     */
    @NotNull
    public static
    ParsingPartition getLinePartition(final int bufferSize)
    { return new LineParsingPartition(bufferSize); }

    /*
     * TablePartition
     */

    /**
     * <p>构造一个表单分割器.</p>
     * <pre>
     * 该分割器根据 <b>网页表单格式</b> 来对文本进行分割
     * 即每次读取一组键值
     *
     * <b>依据:</b>{@code "&"}
     * </pre>
     *
     * @return {@link ParsingPartition}
     */
    @NotNull
    @Contract( pure = true )
    public static
    ParsingPartition getTablePartition() { return getTablePartition(-1); }

    /**
     * <p>构造一个有最大限制的表单分割器.</p>
     * <p>有最大读取缓存限制的 <b>表单分割器</b></p>
     *
     * @return {@link ParsingPartition}
     */
    @NotNull
    @Contract( pure = true )
    public static
    ParsingPartition getTablePartition(final int bufferSize)
    { return new ParsingPartition(bufferSize, "&"); }
}
